{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* By: Illya Barziy\n",
    "* Email: illyabarziy@gmail.com\n",
    "* Reference: __Some contributions to the clustering of financial time series and applications to credit default swaps__ _by_ Gautier Marti"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Abstract"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "GNP and GNPR distances are a part of a novel technique for measuring the distance between two random variables that allows to separate the measurement of distribution information and the dependence information. A mix of both types of information can be used in a chosen proportion."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## GPR and GNPR distances"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This description is based on the paper by _Gautier Marti_ __“Some contributions to the clustering of financial time series and applications to credit default swaps”__  [available here](https://www.researchgate.net/publication/322714557)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Classification of distances"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "According to _Gautier Marti_:\n",
    "\n",
    "\"Many statistical distances exist to measure the dissimilarity of two random variables, and therefore two i.i.d. random processes. Such distances can be roughly classified in two\n",
    "families:\n",
    "\n",
    "1. __distributional distances__, ... which focus on dissimilarity between probability distributions and quantify divergences in marginal behaviours,\n",
    "\n",
    "2. __dependence distances__, such as the distance correlation or copula-based kernel dependency measures ..., which focus on the joint behaviours of random variables, generally ignoring their distribution properties.\n",
    "\n",
    "However, we may want to be able to discriminate random variables both on distribution and dependence. This can be motivated, for instance, from the study of financial assets returns: are two perfectly correlated random variables (assets returns), but one being normally distributed and the other one following a heavy-tailed distribution, similar?\n",
    "\n",
    "From risk perspective, the answer is no ..., hence the propounded distance of this article\"."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### GPR distance"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "From __“Some contributions to the clustering of financial time series and applications to credit default swaps”__ :\n",
    "\n",
    "__Definition:__ (Distance $d_{\\Theta}$ between two random variables). Let $\\theta \\in [0, 1]$. Let $(X, Y) \\in \\nu^{2}$ , where $\\nu$ is the space of all continuous\n",
    "real-valued random variables. Let $G = (G_{X}, G_{Y})$, where $G_{X}$ and $G_{Y}$ are respectively $X$ and $Y$ marginal cdfs. We define the following distance\n",
    "\n",
    "$$d_{\\Theta}^{2}(X, Y) = \\Theta d_{1}^{2}(G_{X}(X), G_{Y}(Y)) + (1 - \\Theta) d_{0}^{2}(G_{X}, G_{Y})$$\n",
    "\n",
    "where\n",
    "\n",
    "$$d_{1}^{2}(G_{X}(X), G_{Y}(Y)) = 3 \\mathbb{E}[|G_{X}(X) - G_{Y}(Y)|^{2}]$$\n",
    "\n",
    "and\n",
    "\n",
    "$$d_{0}^{2}(G_{X}, G_{Y}) = \\frac{1}{2} \\int_{R} (\\sqrt{\\frac{d G_{X}}{d \\lambda}} - \\sqrt{\\frac{d G_{Y}}{d \\lambda}})^{2} d \\lambda$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Example:__ (Distance $d_{\\Theta}$ between two Gaussians). Let $(X, Y)$ be a bivariate Gaussian vector, with $X \\sim \\mathcal{N}(\\mu_{X}, \\sigma_{X}^{2})$,\n",
    "$Y \\sim \\mathcal{N}(\\mu_{Y}, \\sigma_{Y}^{2})$ and $\\rho (X,Y)$. We obtain,\n",
    "\n",
    "$$d_{\\Theta}^{2}(X, Y) = \\Theta \\frac{1 - \\rho_{S}}{2} + (1 - \\Theta) (1 - \\sqrt{\\frac{2 \\sigma_{X} \\sigma_{Y}}{\\sigma_{X}^{2} + \\sigma_{Y}^{2}}} e^{ - \\frac{1}{4} \\frac{(\\mu_{X} - \\mu_{Y})^{2}}{\\sigma_{X}^{2} + \\sigma_{Y}^{2}}})$$\n",
    "\n",
    "The use of this distance is referenced as the generic parametric representation (GPR) approach.\n",
    "\n",
    "From the paper:\n",
    "\n",
    "\"GPR distance is a fast and good proxy for distance $d_{\\Theta}$ when the first two moments $\\mu$ and ${\\sigma}$ predominate. Nonetheless, for datasets which contain heavy-tailed distributions, GPR fails to capture this information\"."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Property:__ Let $\\Theta \\in [0,1]$. The distance $d_{\\Theta}$verifies $0 \\le d_{\\Theta} \\le 1$.\n",
    "\n",
    "__Property:__ For $0 < \\Theta < 1$, $d_{\\Theta}$ is a metric.\n",
    "\n",
    "__Property:__ [Diffeomorphism](https://en.wikipedia.org/wiki/Diffeomorphism) invariance. Let $h: \\nu \\rightarrow \\nu$ be a diffeomorphism. Let $(X, Y) \\in \\nu^{2}$. Distance $d_{\\Theta}$ is invariant under diffeomorphism, i.e.\n",
    "\n",
    "$$d_{\\Theta}(h(X), h(Y)) = d_{\\Theta}(X, Y)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### GNPR distance"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "According to _Marti_:\n",
    "\n",
    "\"To apply the propounded distance $d_{\\Theta}$ on sampled data without parametric assumptions, we have to define its statistical estimate $\\tilde{d}_{\\Theta}$ working on realizations of the i.i.d. random variables.\n",
    "\n",
    "Distance $d_{1}$ working with continuous uniform distributions can be approximated by normalized rank statistics yielding to discrete uniform distributions.\n",
    "\n",
    "Distance $d_{0}$ working with densities can be approximated by using its discrete form working on histogram density estimates\"."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Definition:__ (Empirical distance) Let $(X^{t})_{t=1}^{T}$ and $(Y^{t})_{t=1}^{T}$ be $T$ realizations of real-valued random variables $X, Y \\in \\nu$ respectively. An empirical distance between realizations of random variables can be defined by\n",
    "\n",
    "$$\\tilde{d}_{\\Theta}^{2}((X^{t})_{t=1}^{T}, (Y^{t})_{t=1}^{T}) \\stackrel{\\text{a.s.}}{=} \\Theta \\tilde{d}_{1}^{2} + (1 - \\Theta) \\tilde{d}_{0}^{2}$$\n",
    "\n",
    "where\n",
    "\n",
    "$$\\tilde{d}_{1}^{2} = \\frac{3}{T(T^{2} - 1)} \\sum_{t = 1}^{T} (X^{(t)} - Y^{(t)}) ^ {2}$$\n",
    "\n",
    "and\n",
    "\n",
    "$$\\tilde{d}_{0}^{2} = \\frac{1}{2} \\sum_{k = - \\infty}^{+ \\infty} (\\sqrt{g_{X}^{h}(hk)} - \\sqrt{g_{Y}^{h}(hk)})^{2}$$\n",
    "\n",
    "$h$ being here a suitable bandwidth, and $g_{X}^{h}(x) = \\frac{1}{T} \\sum_{t = 1}^{T} \\mathbf{1}(\\lfloor \\frac{x}{h} \\rfloor h \\le X^{t} < (\\lfloor \\frac{x}{h} \\rfloor + 1)h)$ being a density histogram estimating dpf $g_{X}$ from\n",
    "$(X^{t})_{t=1}^{T}$ , $T$ realization of a random variable $X \\in \\nu$.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The use of this distance is referenced as the generic non-parametric representation (GNPR) approach.\n",
    "\n",
    "From the paper:\n",
    "\n",
    "\"To use effectively $d_{\\Theta}$ and its statistical estimate, it boils down to select a particular value for $\\Theta$. We suggest here an exploratory approach where one can test \n",
    "\n",
    "- (i) distribution information ($\\Theta = 0$),\n",
    "- (ii) dependence information ($\\Theta = 1$), and\n",
    "- (iii) a mix of both information ($\\Theta = 0.5$).\n",
    "\n",
    "Ideally, $\\Theta$ should reflect the balance of dependence and distribution information in the data.\n",
    "\n",
    "In a supervised setting, one could select an estimate $\\hat{\\Theta}$ of the right balance $\\Theta^{*}$ optimizing some loss function by techniques such as cross-validation. Yet, the lack of a clear loss function makes the estimation of $\\Theta^{*}$ difficult in an unsupervised setting\"."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Usage of the algorithms"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This part shows how the GPR and the GNPR distances can be used to measure codependence between a set of stocks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import mlfinlab as ml\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>EEM</th>\n",
       "      <th>EWG</th>\n",
       "      <th>TIP</th>\n",
       "      <th>EWJ</th>\n",
       "      <th>EFA</th>\n",
       "      <th>IEF</th>\n",
       "      <th>EWQ</th>\n",
       "      <th>EWU</th>\n",
       "      <th>XLB</th>\n",
       "      <th>XLE</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2008-01-02</th>\n",
       "      <td>49.273335</td>\n",
       "      <td>35.389999</td>\n",
       "      <td>106.639999</td>\n",
       "      <td>52.919998</td>\n",
       "      <td>78.220001</td>\n",
       "      <td>87.629997</td>\n",
       "      <td>37.939999</td>\n",
       "      <td>47.759998</td>\n",
       "      <td>41.299999</td>\n",
       "      <td>79.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2008-01-03</th>\n",
       "      <td>49.716667</td>\n",
       "      <td>35.290001</td>\n",
       "      <td>107.000000</td>\n",
       "      <td>53.119999</td>\n",
       "      <td>78.349998</td>\n",
       "      <td>87.809998</td>\n",
       "      <td>37.919998</td>\n",
       "      <td>48.060001</td>\n",
       "      <td>42.049999</td>\n",
       "      <td>80.440002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2008-01-04</th>\n",
       "      <td>48.223331</td>\n",
       "      <td>34.599998</td>\n",
       "      <td>106.970001</td>\n",
       "      <td>51.759998</td>\n",
       "      <td>76.570000</td>\n",
       "      <td>88.040001</td>\n",
       "      <td>36.990002</td>\n",
       "      <td>46.919998</td>\n",
       "      <td>40.779999</td>\n",
       "      <td>77.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2008-01-07</th>\n",
       "      <td>48.576668</td>\n",
       "      <td>34.630001</td>\n",
       "      <td>106.949997</td>\n",
       "      <td>51.439999</td>\n",
       "      <td>76.650002</td>\n",
       "      <td>88.199997</td>\n",
       "      <td>37.259998</td>\n",
       "      <td>47.060001</td>\n",
       "      <td>40.220001</td>\n",
       "      <td>77.199997</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2008-01-08</th>\n",
       "      <td>48.200001</td>\n",
       "      <td>34.389999</td>\n",
       "      <td>107.029999</td>\n",
       "      <td>51.320000</td>\n",
       "      <td>76.220001</td>\n",
       "      <td>88.389999</td>\n",
       "      <td>36.970001</td>\n",
       "      <td>46.400002</td>\n",
       "      <td>39.599998</td>\n",
       "      <td>75.849998</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  EEM        EWG         TIP        EWJ        EFA        IEF  \\\n",
       "Date                                                                            \n",
       "2008-01-02  49.273335  35.389999  106.639999  52.919998  78.220001  87.629997   \n",
       "2008-01-03  49.716667  35.290001  107.000000  53.119999  78.349998  87.809998   \n",
       "2008-01-04  48.223331  34.599998  106.970001  51.759998  76.570000  88.040001   \n",
       "2008-01-07  48.576668  34.630001  106.949997  51.439999  76.650002  88.199997   \n",
       "2008-01-08  48.200001  34.389999  107.029999  51.320000  76.220001  88.389999   \n",
       "\n",
       "                  EWQ        EWU        XLB        XLE  \n",
       "Date                                                    \n",
       "2008-01-02  37.939999  47.759998  41.299999  79.500000  \n",
       "2008-01-03  37.919998  48.060001  42.049999  80.440002  \n",
       "2008-01-04  36.990002  46.919998  40.779999  77.500000  \n",
       "2008-01-07  37.259998  47.060001  40.220001  77.199997  \n",
       "2008-01-08  36.970001  46.400002  39.599998  75.849998  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Loading the dataset of stocks\n",
    "stocks = pd.read_csv('../../Sample-Data/stock_prices.csv')\n",
    "stocks.set_index('Date', inplace=True)\n",
    "stocks.index = pd.to_datetime(stocks.index)\n",
    "\n",
    "# Taking first 10 stocks for better output visualization\n",
    "stocks = stocks.iloc[:,0:10]\n",
    "stocks.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>EEM</th>\n",
       "      <th>EWG</th>\n",
       "      <th>TIP</th>\n",
       "      <th>EWJ</th>\n",
       "      <th>EFA</th>\n",
       "      <th>IEF</th>\n",
       "      <th>EWQ</th>\n",
       "      <th>EWU</th>\n",
       "      <th>XLB</th>\n",
       "      <th>XLE</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2008-01-03</th>\n",
       "      <td>0.008997</td>\n",
       "      <td>-0.002826</td>\n",
       "      <td>0.003376</td>\n",
       "      <td>0.003779</td>\n",
       "      <td>0.001662</td>\n",
       "      <td>0.002054</td>\n",
       "      <td>-0.000527</td>\n",
       "      <td>0.006281</td>\n",
       "      <td>0.018160</td>\n",
       "      <td>0.011824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2008-01-04</th>\n",
       "      <td>-0.030037</td>\n",
       "      <td>-0.019552</td>\n",
       "      <td>-0.000280</td>\n",
       "      <td>-0.025602</td>\n",
       "      <td>-0.022719</td>\n",
       "      <td>0.002619</td>\n",
       "      <td>-0.024525</td>\n",
       "      <td>-0.023720</td>\n",
       "      <td>-0.030202</td>\n",
       "      <td>-0.036549</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2008-01-07</th>\n",
       "      <td>0.007327</td>\n",
       "      <td>0.000867</td>\n",
       "      <td>-0.000187</td>\n",
       "      <td>-0.006182</td>\n",
       "      <td>0.001045</td>\n",
       "      <td>0.001817</td>\n",
       "      <td>0.007299</td>\n",
       "      <td>0.002984</td>\n",
       "      <td>-0.013732</td>\n",
       "      <td>-0.003871</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2008-01-08</th>\n",
       "      <td>-0.007754</td>\n",
       "      <td>-0.006930</td>\n",
       "      <td>0.000748</td>\n",
       "      <td>-0.002333</td>\n",
       "      <td>-0.005610</td>\n",
       "      <td>0.002154</td>\n",
       "      <td>-0.007783</td>\n",
       "      <td>-0.014025</td>\n",
       "      <td>-0.015415</td>\n",
       "      <td>-0.017487</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2008-01-09</th>\n",
       "      <td>0.032780</td>\n",
       "      <td>0.003199</td>\n",
       "      <td>-0.000747</td>\n",
       "      <td>0.021824</td>\n",
       "      <td>0.007216</td>\n",
       "      <td>-0.001584</td>\n",
       "      <td>0.002975</td>\n",
       "      <td>0.000431</td>\n",
       "      <td>0.006313</td>\n",
       "      <td>0.013184</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 EEM       EWG       TIP       EWJ       EFA       IEF  \\\n",
       "Date                                                                     \n",
       "2008-01-03  0.008997 -0.002826  0.003376  0.003779  0.001662  0.002054   \n",
       "2008-01-04 -0.030037 -0.019552 -0.000280 -0.025602 -0.022719  0.002619   \n",
       "2008-01-07  0.007327  0.000867 -0.000187 -0.006182  0.001045  0.001817   \n",
       "2008-01-08 -0.007754 -0.006930  0.000748 -0.002333 -0.005610  0.002154   \n",
       "2008-01-09  0.032780  0.003199 -0.000747  0.021824  0.007216 -0.001584   \n",
       "\n",
       "                 EWQ       EWU       XLB       XLE  \n",
       "Date                                                \n",
       "2008-01-03 -0.000527  0.006281  0.018160  0.011824  \n",
       "2008-01-04 -0.024525 -0.023720 -0.030202 -0.036549  \n",
       "2008-01-07  0.007299  0.002984 -0.013732 -0.003871  \n",
       "2008-01-08 -0.007783 -0.014025 -0.015415 -0.017487  \n",
       "2008-01-09  0.002975  0.000431  0.006313  0.013184  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Calculating returns of a given dataset of stocks\n",
    "\n",
    "# Class containing needed function\n",
    "ret_est = ml.portfolio_optimization.ReturnsEstimators()\n",
    "\n",
    "# Calculating returns\n",
    "stocks_returns = ret_est.calculate_returns(stocks)\n",
    "stocks_returns.iloc[:,0:10].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GPR distance between EEM and EWG measuring a mix of distribution and dependence information is:  0.24303211776227326\n"
     ]
    }
   ],
   "source": [
    "# Calculating GPR distance between two tickers - EEM and EWG\n",
    "gpr_dist = ml.codependence.gpr_distance(stocks_returns['EEM'], stocks_returns['EWG'], theta=0.5)\n",
    "print('GPR distance between EEM and EWG measuring a mix of distribution and dependence information is: ', gpr_dist)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GPR distance between EEM and EWG measuring dependence information is:  0.33908616627992194\n"
     ]
    }
   ],
   "source": [
    "# Calculating GPR distance between two tickers - EEM and EWG using only dependence information\n",
    "gpr_dist = ml.codependence.gpr_distance(stocks_returns['EEM'], stocks_returns['EWG'], theta=1)\n",
    "print('GPR distance between EEM and EWG measuring dependence information is: ', gpr_dist)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GNPR distance between EEM and EWG measuring a mix of distribution and dependence information is:  0.04942613292915897\n"
     ]
    }
   ],
   "source": [
    "# Calculating GNPR distance between two tickers - EEM and EWG\n",
    "gpr_dist = ml.codependence.gnpr_distance(stocks_returns['EEM'], stocks_returns['EWG'], theta=0.5)\n",
    "print('GNPR distance between EEM and EWG measuring a mix of distribution and dependence information is: ', gpr_dist)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GNPR distance between EEM and EWG measuring distribution information is:  0.011284701054010133\n"
     ]
    }
   ],
   "source": [
    "# Calculating GNPR distance between two tickers - EEM and EWG using only distribution information and 0.1 width of bins\n",
    "gpr_dist = ml.codependence.gnpr_distance(stocks_returns['EEM'], stocks_returns['EWG'], theta=0, bandwidth=0.1)\n",
    "print('GNPR distance between EEM and EWG measuring distribution information is: ', gpr_dist)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "These codependence measures can also be used on the whole dataframes, the results will be codependence matrices."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GPR distance matrix measuring a mix of distribution and dependence information:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>EEM</th>\n",
       "      <th>EWG</th>\n",
       "      <th>TIP</th>\n",
       "      <th>EWJ</th>\n",
       "      <th>EFA</th>\n",
       "      <th>IEF</th>\n",
       "      <th>EWQ</th>\n",
       "      <th>EWU</th>\n",
       "      <th>XLB</th>\n",
       "      <th>XLE</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>EEM</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.243032</td>\n",
       "      <td>6.917055e-01</td>\n",
       "      <td>3.080851e-01</td>\n",
       "      <td>2.167705e-01</td>\n",
       "      <td>0.723287</td>\n",
       "      <td>0.236127</td>\n",
       "      <td>0.238692</td>\n",
       "      <td>0.257452</td>\n",
       "      <td>2.641690e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EWG</th>\n",
       "      <td>0.243032</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>6.834031e-01</td>\n",
       "      <td>3.000441e-01</td>\n",
       "      <td>1.501956e-01</td>\n",
       "      <td>0.711702</td>\n",
       "      <td>0.128455</td>\n",
       "      <td>0.206135</td>\n",
       "      <td>0.263928</td>\n",
       "      <td>2.838520e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>TIP</th>\n",
       "      <td>0.691705</td>\n",
       "      <td>0.683403</td>\n",
       "      <td>7.450581e-09</td>\n",
       "      <td>6.484753e-01</td>\n",
       "      <td>6.659399e-01</td>\n",
       "      <td>0.246630</td>\n",
       "      <td>0.684698</td>\n",
       "      <td>0.669975</td>\n",
       "      <td>0.665189</td>\n",
       "      <td>6.800092e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EWJ</th>\n",
       "      <td>0.308085</td>\n",
       "      <td>0.300044</td>\n",
       "      <td>6.484753e-01</td>\n",
       "      <td>7.450581e-09</td>\n",
       "      <td>2.249911e-01</td>\n",
       "      <td>0.672096</td>\n",
       "      <td>0.294697</td>\n",
       "      <td>0.290073</td>\n",
       "      <td>0.313528</td>\n",
       "      <td>3.394935e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EFA</th>\n",
       "      <td>0.216770</td>\n",
       "      <td>0.150196</td>\n",
       "      <td>6.659399e-01</td>\n",
       "      <td>2.249911e-01</td>\n",
       "      <td>7.450581e-09</td>\n",
       "      <td>0.697111</td>\n",
       "      <td>0.128454</td>\n",
       "      <td>0.145634</td>\n",
       "      <td>0.233819</td>\n",
       "      <td>2.671068e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IEF</th>\n",
       "      <td>0.723287</td>\n",
       "      <td>0.711702</td>\n",
       "      <td>2.466302e-01</td>\n",
       "      <td>6.720957e-01</td>\n",
       "      <td>6.971110e-01</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.712834</td>\n",
       "      <td>0.699468</td>\n",
       "      <td>0.697503</td>\n",
       "      <td>7.136660e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EWQ</th>\n",
       "      <td>0.236127</td>\n",
       "      <td>0.128455</td>\n",
       "      <td>6.846981e-01</td>\n",
       "      <td>2.946971e-01</td>\n",
       "      <td>1.284544e-01</td>\n",
       "      <td>0.712834</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.187420</td>\n",
       "      <td>0.260472</td>\n",
       "      <td>2.757699e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EWU</th>\n",
       "      <td>0.238692</td>\n",
       "      <td>0.206135</td>\n",
       "      <td>6.699747e-01</td>\n",
       "      <td>2.900728e-01</td>\n",
       "      <td>1.456335e-01</td>\n",
       "      <td>0.699468</td>\n",
       "      <td>0.187420</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.251571</td>\n",
       "      <td>2.735926e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>XLB</th>\n",
       "      <td>0.257452</td>\n",
       "      <td>0.263928</td>\n",
       "      <td>6.651887e-01</td>\n",
       "      <td>3.135281e-01</td>\n",
       "      <td>2.338193e-01</td>\n",
       "      <td>0.697503</td>\n",
       "      <td>0.260472</td>\n",
       "      <td>0.251571</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.350359e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>XLE</th>\n",
       "      <td>0.264169</td>\n",
       "      <td>0.283852</td>\n",
       "      <td>6.800092e-01</td>\n",
       "      <td>3.394935e-01</td>\n",
       "      <td>2.671068e-01</td>\n",
       "      <td>0.713666</td>\n",
       "      <td>0.275770</td>\n",
       "      <td>0.273593</td>\n",
       "      <td>0.235036</td>\n",
       "      <td>7.450581e-09</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          EEM       EWG           TIP           EWJ           EFA       IEF  \\\n",
       "EEM  0.000000  0.243032  6.917055e-01  3.080851e-01  2.167705e-01  0.723287   \n",
       "EWG  0.243032  0.000000  6.834031e-01  3.000441e-01  1.501956e-01  0.711702   \n",
       "TIP  0.691705  0.683403  7.450581e-09  6.484753e-01  6.659399e-01  0.246630   \n",
       "EWJ  0.308085  0.300044  6.484753e-01  7.450581e-09  2.249911e-01  0.672096   \n",
       "EFA  0.216770  0.150196  6.659399e-01  2.249911e-01  7.450581e-09  0.697111   \n",
       "IEF  0.723287  0.711702  2.466302e-01  6.720957e-01  6.971110e-01  0.000000   \n",
       "EWQ  0.236127  0.128455  6.846981e-01  2.946971e-01  1.284544e-01  0.712834   \n",
       "EWU  0.238692  0.206135  6.699747e-01  2.900728e-01  1.456335e-01  0.699468   \n",
       "XLB  0.257452  0.263928  6.651887e-01  3.135281e-01  2.338193e-01  0.697503   \n",
       "XLE  0.264169  0.283852  6.800092e-01  3.394935e-01  2.671068e-01  0.713666   \n",
       "\n",
       "          EWQ       EWU       XLB           XLE  \n",
       "EEM  0.236127  0.238692  0.257452  2.641690e-01  \n",
       "EWG  0.128455  0.206135  0.263928  2.838520e-01  \n",
       "TIP  0.684698  0.669975  0.665189  6.800092e-01  \n",
       "EWJ  0.294697  0.290073  0.313528  3.394935e-01  \n",
       "EFA  0.128454  0.145634  0.233819  2.671068e-01  \n",
       "IEF  0.712834  0.699468  0.697503  7.136660e-01  \n",
       "EWQ  0.000000  0.187420  0.260472  2.757699e-01  \n",
       "EWU  0.187420  0.000000  0.251571  2.735926e-01  \n",
       "XLB  0.260472  0.251571  0.000000  2.350359e-01  \n",
       "XLE  0.275770  0.273593  0.235036  7.450581e-09  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Calculating GPR distance between all stocks with Θ = 0.5\n",
    "gpr_matrix = ml.codependence.get_dependence_matrix(stocks_returns, dependence_method='gpr_distance',theta=0.5)\n",
    "\n",
    "print('GPR distance matrix measuring a mix of distribution and dependence information:')\n",
    "gpr_matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "GNPR distance matrix measuring distribution information:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>EEM</th>\n",
       "      <th>EWG</th>\n",
       "      <th>TIP</th>\n",
       "      <th>EWJ</th>\n",
       "      <th>EFA</th>\n",
       "      <th>IEF</th>\n",
       "      <th>EWQ</th>\n",
       "      <th>EWU</th>\n",
       "      <th>XLB</th>\n",
       "      <th>XLE</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>EEM</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.069899</td>\n",
       "      <td>0.433256</td>\n",
       "      <td>0.103842</td>\n",
       "      <td>0.092078</td>\n",
       "      <td>0.423029</td>\n",
       "      <td>0.062548</td>\n",
       "      <td>0.083680</td>\n",
       "      <td>0.074167</td>\n",
       "      <td>0.081416</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EWG</th>\n",
       "      <td>0.069899</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.425756</td>\n",
       "      <td>0.092746</td>\n",
       "      <td>0.077320</td>\n",
       "      <td>0.414321</td>\n",
       "      <td>0.050507</td>\n",
       "      <td>0.070496</td>\n",
       "      <td>0.066776</td>\n",
       "      <td>0.070756</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>TIP</th>\n",
       "      <td>0.433256</td>\n",
       "      <td>0.425756</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.381877</td>\n",
       "      <td>0.367906</td>\n",
       "      <td>0.048427</td>\n",
       "      <td>0.442332</td>\n",
       "      <td>0.365841</td>\n",
       "      <td>0.409336</td>\n",
       "      <td>0.436058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EWJ</th>\n",
       "      <td>0.103842</td>\n",
       "      <td>0.092746</td>\n",
       "      <td>0.381877</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.049444</td>\n",
       "      <td>0.361378</td>\n",
       "      <td>0.105416</td>\n",
       "      <td>0.065798</td>\n",
       "      <td>0.074869</td>\n",
       "      <td>0.099113</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EFA</th>\n",
       "      <td>0.092078</td>\n",
       "      <td>0.077320</td>\n",
       "      <td>0.367906</td>\n",
       "      <td>0.049444</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.356521</td>\n",
       "      <td>0.091514</td>\n",
       "      <td>0.043490</td>\n",
       "      <td>0.059416</td>\n",
       "      <td>0.092205</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IEF</th>\n",
       "      <td>0.423029</td>\n",
       "      <td>0.414321</td>\n",
       "      <td>0.048427</td>\n",
       "      <td>0.361378</td>\n",
       "      <td>0.356521</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.431011</td>\n",
       "      <td>0.359146</td>\n",
       "      <td>0.392288</td>\n",
       "      <td>0.421631</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EWQ</th>\n",
       "      <td>0.062548</td>\n",
       "      <td>0.050507</td>\n",
       "      <td>0.442332</td>\n",
       "      <td>0.105416</td>\n",
       "      <td>0.091514</td>\n",
       "      <td>0.431011</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.078910</td>\n",
       "      <td>0.070127</td>\n",
       "      <td>0.064721</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EWU</th>\n",
       "      <td>0.083680</td>\n",
       "      <td>0.070496</td>\n",
       "      <td>0.365841</td>\n",
       "      <td>0.065798</td>\n",
       "      <td>0.043490</td>\n",
       "      <td>0.359146</td>\n",
       "      <td>0.078910</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.055026</td>\n",
       "      <td>0.085241</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>XLB</th>\n",
       "      <td>0.074167</td>\n",
       "      <td>0.066776</td>\n",
       "      <td>0.409336</td>\n",
       "      <td>0.074869</td>\n",
       "      <td>0.059416</td>\n",
       "      <td>0.392288</td>\n",
       "      <td>0.070127</td>\n",
       "      <td>0.055026</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.072491</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>XLE</th>\n",
       "      <td>0.081416</td>\n",
       "      <td>0.070756</td>\n",
       "      <td>0.436058</td>\n",
       "      <td>0.099113</td>\n",
       "      <td>0.092205</td>\n",
       "      <td>0.421631</td>\n",
       "      <td>0.064721</td>\n",
       "      <td>0.085241</td>\n",
       "      <td>0.072491</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          EEM       EWG       TIP       EWJ       EFA       IEF       EWQ  \\\n",
       "EEM  0.000000  0.069899  0.433256  0.103842  0.092078  0.423029  0.062548   \n",
       "EWG  0.069899  0.000000  0.425756  0.092746  0.077320  0.414321  0.050507   \n",
       "TIP  0.433256  0.425756  0.000000  0.381877  0.367906  0.048427  0.442332   \n",
       "EWJ  0.103842  0.092746  0.381877  0.000000  0.049444  0.361378  0.105416   \n",
       "EFA  0.092078  0.077320  0.367906  0.049444  0.000000  0.356521  0.091514   \n",
       "IEF  0.423029  0.414321  0.048427  0.361378  0.356521  0.000000  0.431011   \n",
       "EWQ  0.062548  0.050507  0.442332  0.105416  0.091514  0.431011  0.000000   \n",
       "EWU  0.083680  0.070496  0.365841  0.065798  0.043490  0.359146  0.078910   \n",
       "XLB  0.074167  0.066776  0.409336  0.074869  0.059416  0.392288  0.070127   \n",
       "XLE  0.081416  0.070756  0.436058  0.099113  0.092205  0.421631  0.064721   \n",
       "\n",
       "          EWU       XLB       XLE  \n",
       "EEM  0.083680  0.074167  0.081416  \n",
       "EWG  0.070496  0.066776  0.070756  \n",
       "TIP  0.365841  0.409336  0.436058  \n",
       "EWJ  0.065798  0.074869  0.099113  \n",
       "EFA  0.043490  0.059416  0.092205  \n",
       "IEF  0.359146  0.392288  0.421631  \n",
       "EWQ  0.078910  0.070127  0.064721  \n",
       "EWU  0.000000  0.055026  0.085241  \n",
       "XLB  0.055026  0.000000  0.072491  \n",
       "XLE  0.085241  0.072491  0.000000  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Calculating GNPR distance between all stocks with Θ = 1\n",
    "gnpr_matrix_dep = ml.codependence.get_dependence_matrix(stocks_returns, dependence_method='gnpr_distance',theta=1)\n",
    "\n",
    "# Calculating GNPR distance between all stocks with Θ = 0.5\n",
    "gnpr_matrix_mix = ml.codependence.get_dependence_matrix(stocks_returns, dependence_method='gnpr_distance',theta=0.5)\n",
    "\n",
    "# Calculating GNPR distance between all stocks with Θ = 0\n",
    "gnpr_matrix_dist = ml.codependence.get_dependence_matrix(stocks_returns, dependence_method='gnpr_distance',theta=0)\n",
    "\n",
    "print('GNPR distance matrix measuring distribution information:')\n",
    "gnpr_matrix_dist"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Heatmap of GNPR distribution information distance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plotting the heatmap\n",
    "fig, ax = plt.subplots(figsize=(10, 8))\n",
    "sns.heatmap(gnpr_matrix_dist, ax = ax, cbar_kws={'label': 'GNPR distribution distance'})\n",
    "\n",
    "ax.set_title('Heatmap of GNPR distribution information distance (Θ = 0)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Heatmap of GNPR mix of distribution and dependence information distance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plotting the heatmap\n",
    "fig, ax = plt.subplots(figsize=(10,8))\n",
    "sns.heatmap(gnpr_matrix_mix, ax = ax, cbar_kws={'label': 'GNPR mixed distance'})\n",
    "\n",
    "ax.set_title('Heatmap of GNPR mix of distribution and dependence information distance (Θ = 0.5)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Heatmap of GNPR dependence information distance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x576 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plotting the heatmap\n",
    "fig, ax = plt.subplots(figsize=(10,8))\n",
    "sns.heatmap(gnpr_matrix_dep, ax = ax, cbar_kws={'label': 'GNPR dependence distance'})\n",
    "\n",
    "ax.set_title('Heatmap of GNPR dependence information distance (Θ = 1)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As seen from the heat maps of GNPR distance matrices, distribution and information distances show different types of codependency. However, when using a mixed approach with $\\Theta = 0.5$ the distribution information part is too high, which makes the dependence information adjustment hardly visible, so for a balanced output one may want to increase $\\Theta$ in this particular example. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusion"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This notebook describes the GPR and the GNPR distances how they may be used in real-life applications.  \n",
    "\n",
    "These novel distances were originally presented by the _Gautier Marti_ in the work __“Some contributions to the clustering of financial time series and applications to credit default swaps”__  [available here](https://www.researchgate.net/publication/322714557).\n",
    "\n",
    "Key takeaways from the notebook:\n",
    "- Distances can be roughly classified in two families:\n",
    "  - Distributional distances, which focus on dissimilarity between probability distributions and quantify divergences in marginal behaviours.\n",
    "  - Dependence distances, which focus on the joint behaviours of random variables, generally ignoring their distribution properties.\n",
    "- Distance $d_{\\Theta}$ between two random variables allows to discriminate random variables both on distribution and dependence.\n",
    "- Distance $d_{\\Theta}$ is a metric that falls in range $[0, 1]$.\n",
    "- GPR distance is a fast and good proxy for distance $d_{\\Theta}$ between two Gaussians.\n",
    "- GNPR distance is a proxy for distance $d_{\\Theta}$ that works on i.i.d. random variables, it requires a declared width of bins for values discretization.\n",
    "- $d_{\\Theta}$ should be chosen to reflect the balance of dependence and distribution information in the data."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusion"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. Marti, Gautier. (2017). Some contributions to the clustering of financial time series and applications to credit default swaps. Available at: https://www.researchgate.net/publication/322714557"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "mlfinlab",
   "language": "python",
   "name": "mlfinlab"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
